// 从express导入几个对象
import { Request, Response, NextFunction } from 'express';

// 假设中间件的作用是输出请求的地址
export const requestUrl = (
  req: Request,
  res: Response,
  next: NextFunction
) => {
  // 控制台输出req的地址,也就是请求的地址
  console.log(req.url);
  // 在中间件里要执行next()函数，这个请求才会继续被其他的中间件和接口处理器去处理，如果不写next()请求会一直卡在那里
  next();
}
// 把这个公共中间件给需要的路由

// 默认异常处理器
// 参数：any,Request,Response,NextFunction
export const defaultErrorHandler = (
  error: any,
  req: Request,
  res: Response,
  next: NextFunction
) => {
  // 增加处理输出打印错误，如果sql语句出错可以后台打印错误信息
  if (error.message) {
    console.log(error.message)
  }
  // 状态码:数字             
  let statusCode: number;
  // 信息：字符串 
  let message: string;
  //异常处理
  switch (error.message) {
		// 用户信息错误处理400
		case "USERNAME_NOT_FOUND":
			statusCode = 400;
			message = "请输入用户名";
			break;
		case "PASSWORD_NOT_FOUND":
			statusCode = 400;
			message = "请输入密码";
			break;
		// 用户名重复（409 Conflict 冲突）
		case "USER_ALREADY_EXISTS":
			statusCode = 409;
			message = "用户名被占用";
			break;
		// 用户未找到
		case "USER_NOT_FOUND":
			statusCode = 400;
			message = "用户不存在";
			break;
		// 密码错误
		case "PASSWORD_ERROR":
			statusCode = 400;
			message = "密码错误";
			break;
		// 默认500
		default:
			statusCode = 500;
			message = "服务出问题~~~";
			break;
	}
  //响应
  res.status(statusCode).send({ message });

}
//在index.ts中导入